package digitrencer;

/**
 * A kapuk gyűjtőosztálya. Az összes nem kompozit elemként megvalósított logikai
 * kaput ebből az osztályból származtatjuk.
 * @author taplonaplo
 */
public abstract class Gate extends Element {
        /**
         * A Gate osztály konstruktora. Meghívja az Element konstruktorát, majd
         * ellenőrzi, hogy hány kimeneti vezetéket kapott. Amennyiben több, mint
         * egyet, hibát dob, mivel a kapuknak legfeljebb egy kimenetük lehet.
         * @param inputs    Bemeneti vezetékek
         * @param outputs   Kimeneti vezetékek
         * @throws IllegalArgumentException Amennyiben több, mint egy kimeneti
         * vezetéket adunk meg.
         */
        Gate(Wire[] inputs, Wire[] outputs) throws IllegalArgumentException{
            super(inputs,outputs);
            if (outputs.length > 1)
                throw new IllegalArgumentException("Egy kapunak nem lehet több, mint egy kimenete!");
        }
        
        /**
         * A kapuk futási metódusa. Ezt a különböző kapukra külön-külön
         * valósítjuk meg.
         */
    @Override
	public abstract void run();
}